package br.com.cnpv.modelo.dao;

import java.util.Iterator;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;

import br.com.cnpv.modelo.acesso.idao.IUsuarioDAO;
import br.com.cnpv.modelo.entity.Usuario;

public class UsuarioDAO implements IUsuarioDAO{

	@SuppressWarnings("rawtypes")
	@Override
	public Usuario login(Usuario usuario, Session session) throws HibernateException 
	{
		Query query = session.getNamedQuery("Usuario.login");
		
		query.setString("login", usuario.getDsLogin());
		query.setString("senha", usuario.getSenha());
		
		
		Iterator it = query.iterate();
		
		if(it.hasNext())
		{
			usuario = (Usuario)it.next();
		}else
		{
			usuario = null;
		}
		
		return usuario;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> buscar(Usuario usuario, Session session) throws HibernateException 
	{
		
		String clausula = "";
		Query query = null;
		
		if(usuario.getNmUsuario()!=null  && StringUtils.isNotEmpty(usuario.getNmUsuario())) {
			
			clausula = "%" + usuario.getNmUsuario() + "%";
			
			query = session.getNamedQuery("Usuario.buscarByNome");
			
		} else if(usuario.getPerfil().getNmPerfil()!=null  && StringUtils.isNotEmpty(usuario.getPerfil().getNmPerfil())) {
			
			clausula = "%" + usuario.getPerfil().getNmPerfil() + "%";
			
			query = session.getNamedQuery("Usuario.buscarByNmPerfil");
			
		} else {
			
			clausula = "%" + usuario.getAssociacao().getRazaoSocial() + "%";
			
			query = session.getNamedQuery("Usuario.buscarByAssociacao");
		}

		query.setString("clausula", clausula);
		
		return query.list();
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> listar(Session session) throws HibernateException 
	{
		Query query = session.getNamedQuery("Usuario.listar");
		return query.list();
	}

	public void saveOrUpdate(Usuario usuario, Session session)
			throws HibernateException {
		session.merge(usuario);
	}

}